// Пример формирования отчета в формате Generic Issue Data для sonarqube
// https://docs.sonarqube.org/latest/analysis/generic-issue/

#Использовать osparser
#Использовать "./plugins"

ПутьИсходника = "C:\dev\sonarqube\myprj\src\CommonModules\CommonUse\Ext\Module.bsl";
ПутьОтчета    = "C:\dev\sonarqube\myprj\bsl-generic-json.json";

ЧтениеТекста = Новый ЧтениеТекста(ПутьИсходника);
Исходник = ЧтениеТекста.Прочитать();
ЧтениеТекста.Закрыть();

Плагины = Новый Массив;
Плагины.Добавить(Новый ДетекторНеиспользуемыхПеременных);
Плагины.Добавить(Новый ДетекторОшибочныхЗамыкающихКомментариев);
Плагины.Добавить(Новый ДетекторФункцийБезВозвратаВКонце);
Плагины.Добавить(Новый ДетекторПропущенныхТочекСЗапятой);
Плагины.Добавить(Новый ПроверкаКаноничностиКлючевыхСлов);

Парсер = Новый ПарсерВстроенногоЯзыка;
Парсер.Пуск(Исходник, Плагины);

Проблемы = Новый Массив;

Для Каждого Ошибка Из Парсер.ТаблицаОшибок() Цикл

	Диапазон = Новый Структура;
	Диапазон.Вставить("startLine", Ошибка.НомерСтрокиНачала);
	Диапазон.Вставить("endLine", Ошибка.НомерСтрокиКонца);
	Диапазон.Вставить("startColumn", Ошибка.НомерКолонкиНачала - 1);
	Диапазон.Вставить("endColumn", Ошибка.НомерКолонкиКонца - 1);

	Место = Новый Структура;
	Место.Вставить("message", Ошибка.Текст);
	Место.Вставить("filePath", ПутьИсходника);
	Место.Вставить("textRange", Диапазон);

	Проблема = Новый Структура;
	Проблема.Вставить("engineId", "osparser");
	Проблема.Вставить("ruleId", Ошибка.Источник); // Ошибка.Правило
	Проблема.Вставить("severity", "INFO"); // Ошибка.Серьезность
	Проблема.Вставить("type", "CODE_SMELL"); // Ошибка.Тип
	Проблема.Вставить("primaryLocation", Место);
	Проблема.Вставить("effortMinutes", 5); // Ошибка.МинутНаИсправление
	Проблемы.Добавить(Проблема);

КонецЦикла;

Отчет = Новый Структура("issues", Проблемы);

ЗаписьJSON = Новый ЗаписьJSON;

ЗаписьJSON.ОткрытьФайл(ПутьОтчета, "UTF-8",, Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Unix));
ЗаписатьJSON(ЗаписьJSON, Отчет);
ЗаписьJSON.Закрыть()

// ЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Unix));
// Сообщить(ЗаписьJSON.Закрыть());